import axios from 'axios'
import errorCode from '@/utils/errorCode'
import { Message } from 'element-ui'

axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
// 创建axios实例
const service = axios.create({
  // axios中请求配置有baseURL选项，表示请求URL公共部分
  baseURL: process.env.VUE_APP_BASE_API,
  // 超时
  timeout: 10000
})

// request拦截器
service.interceptors.request.use(config => {
  // 开始加载动画
  // 在发送请求之前
  // config.headers.X_Token = localStorage.getItem('X_Token')
  // config.headers.systemFlag = "0"
  // 时间戳和令牌
  // if (localStorage.getItem('X_Token')) {
  //   let timestamp = String(Date.parse(new Date()) / 1000);
  //   let randomNum = String(Math.floor((Math.random()*90)+10));
  //   let Newtimestamp = timestamp.slice(0,-2)+randomNum+timestamp.slice(-2)
  //   let perToken = localStorage.getItem('X_Token').slice(0, randomNum.slice(0,1));
  //   let sufToken = localStorage.getItem('X_Token').slice(randomNum.slice(0,1));
  //   config.headers.X_Sign = md5(perToken + timestamp + sufToken)
  //   config.headers.X_Timestamp = Newtimestamp
  // }
  return config
}, error => {
  console.log(error)
  Promise.reject(error)
})

// 响应拦截器
service.interceptors.response.use(res => {
  // 未设置状态码则默认成功状态
  const code = res.data.code || 200
  // 获取错误信息
  const msg = errorCode[code] || res.data.msg || errorCode.default
  // 二进制数据则直接返回
  if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
    return res.data
  }
  if (code === 401) {
    // if (!isRelogin.show) {
    //   isRelogin.show = true
    //   MessageBox.confirm('登录状态已过期，您可以继续留在该页面，或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => {
    //     isRelogin.show = false
    //     store.dispatch('LogOut').then(() => {
    //       location.href = '/index'
    //     })
    //   }).catch(() => {
    //     isRelogin.show = false
    //   })
    // }
    // eslint-disable-next-line prefer-promise-reject-errors
    return Promise.reject('无效的会话，或者会话已过期，请重新登录。')
  } else if (code === 500) {
    Message({ message: msg, type: 'error' })
    return Promise.reject(new Error(msg))
  } else if (code === 601) {
    Message({ message: msg, type: 'warning' })
    // eslint-disable-next-line prefer-promise-reject-errors
    return Promise.reject('error')
  } else if (code !== 200) {
    Notification.error({ title: msg })
    // eslint-disable-next-line prefer-promise-reject-errors
    return Promise.reject('error')
  } else {
    return res.data
  }
},
error => {
  console.log('err' + error)
  let { message } = error
  if (message === 'Network Error') {
    message = '后端接口连接异常'
  } else if (message.includes('timeout')) {
    message = '系统接口请求超时'
  } else if (message.includes('Request failed with status code')) {
    message = '系统接口' + message.substr(message.length - 3) + '异常'
  }
  Message({ message: message, type: 'error', duration: 5 * 1000 })
  return Promise.reject(error)
}
)

export default service
